package jmine.tec.datadigester.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import jmine.tec.persist.annotation.Alias;
import jmine.tec.persist.annotation.Constraint;

import org.hibernate.annotations.Type;

import bancosys.tec.component.Documentation;
import bancosys.tec.persist.bussobj.PersistableBusinessObject;
import bancosys.tec.utils.date.Timestamp;

/**
 * XXX (mmr) : solucao temporaria de lock pessimista para resolver problema de concorrencia em importacao de arquivo
 * 
 * @author Marcio Ribeiro (mmr)
 * @created Sep 26, 2008
 */
@Entity
@Table(name = "DIGLOC")
@Alias("DIGLOC")
@SequenceGenerator(name = "SEQ_DIGLOC", sequenceName = "SEQ_DIGLOC")
@Documentation("CONTROLE DE EXECUCAO DO PROCESSO DE IMPORTACAO DE ARQUIVOS.")
public class DigesterLock extends PersistableBusinessObject {
    /** ID de Lock. */
    public static final Long DIGESTER_LOCK_ID = 1L;

    private Long id;

    private Boolean using;

    private String fileName;

    private Timestamp timestamp;

    /**
     * @return valor do campo fileName.
     */
    @Column(name = "FILENAME", nullable = false)
    @Documentation("NOME DO ARQUIVO QUE ESTÁ EM EXECUÇÃO.")
    public String getFileName() {
        return this.fileName;
    }

    /**
     * Define valor para campo fileName.
     * 
     * @param fileName valor para campo fileName.
     */
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    /**
     * @return valor do campo timestamp.
     */
    @Column(name = "TS", nullable = false)
    @Type(type = "bancosys.tec.persist.hibernate.type.TimestampType")
    @Documentation("DATA/HORA DO INÍCIO DA EXECUÇÃO.")
    public Timestamp getTimestamp() {
        return this.timestamp;
    }

    /**
     * Define valor para campo timestamp.
     * 
     * @param timestamp valor para campo timestamp.
     */
    public void setTimestamp(Timestamp timestamp) {
        this.timestamp = timestamp;
    }

    /**
     * @return id.
     */
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_DIGLOC")
    @Column(name = "COD_DIGLOC", nullable = false)
    @Documentation("CÓDIGO DO REGISTRO DE CONTROLE DA EXECUÇÃO.")
    public Long getId() {
        return this.id;
    }

    /**
     * @param id id.
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * @return <code>true</code> tem alguem usando, <code>false</code> se nao.
     */
    @Constraint(suffix = "JT_0")
    @Column(name = "IS_USING", nullable = false)
    @Documentation("INFORMA SE O REGISTRO ESTÁ OU NÃO EM USO NO MOMENTO.")
    public Boolean getUsing() {
        return this.using;
    }

    /**
     * @param using <code>true</code> se tem alguem usando, <code>false</code> se nao.
     */
    public void setUsing(Boolean using) {
        this.using = using;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public String toString() {
        return "DigesterLock:" + this.getId();
    }
}
